package com.wanxi.tcp.demo6理解客户端和服务器相互发送数据;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP服务器端 可以和客户端进行对话
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        System.out.println("tcp 服务端启动.....");
        //1. 创建服务器端socket
        ServerSocket serverSocket = new ServerSocket(30000);

        System.out.println("等待客户端的连接....");
        while (true) {
            //2 建立客户端soket通道,阻塞形式
            Socket socket = serverSocket.accept();
            System.out.println("有客户端接入.....");
            //3 创建输入流 建立socket通道,阻塞形式
            InputStreamReader reader = new InputStreamReader(socket.getInputStream());
            //4 创建接收客户端信息的输入流
            BufferedReader bufferedReader = new BufferedReader(reader);
            //5 创建输出到客户端的输出流
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            // 6 创建控制台的输入流
            BufferedReader controlReader = new BufferedReader(new InputStreamReader(System.in));
            //7 接收上传的信息,拿到客户端的信息
            String clientMessage = "";
            while ((clientMessage = bufferedReader.readLine()) != null) {
                //8 输出信息
                System.out.println("客户端说：" + clientMessage);
                // 9 接收服务器端就控制台的输入
                System.out.println("请输入你相对客户端回复的信息？");
                String sendMessage = controlReader.readLine();
                if (sendMessage != null) {
                    // 向客户端发消息
                    writer.write(sendMessage);
                    writer.newLine();
                    writer.flush();
                }
                // 接收服务器端发送的信息，可以优化到while(clientMessage != null)这里。
                ;
            }

        }

    }
}
